package main

//import (
//	"fmt"
//	"strings"
//	"time"
//)
//
//// 将程序的读取、写入功能单独封装为接口，便于后续扩展
//type Reader interface {
//	Read(rc chan string)
//}
//
//type Writer interface {
//	Write(wc chan string)
//}
//
//type ReadFromFile struct {
//	path string			// 读取文件的路径
//}
//
//type WriteToInfluxDB struct {
//	influxDBDsn string	// influx data source
//}
//
//type LogProcess struct {
//	rc chan string 		// 读取channel, 从读取模块到解析模块传递数据
//	wc chan string 		// 写入channel, 从解析模块到写入模块传递数据
//	// 注入类型，相当于继承的用法
//	reader Reader		// LogProcess继承自Reader类
//	writer Writer		// LogProcess继承自Writer类
//}
//
//// 读取模块
//	// 重写Read方法，实现Reader接口，传入string类型channel变量rc
//func (r *ReadFromFile) Read(rc chan string) {
//	line := "message"
//	rc <- line					// 写入数据到rc channel
//}
//
//// 写入模块
//func (w *WriteToInfluxDB) Write(wc chan string) {
//	fmt.Println(<- wc)				// 从wc channel读取数据
//}
//
//// 解析模块
//func (l *LogProcess) Process() {
//	data := <- l.rc					// 从rc channel读取数据
//	l.wc <- strings.ToUpper(data)	// 处理数据，并写入wc channel
//}
//
//func main()  {
//	// 初始化结构体，结构体只有在初始化之后才能使用
//	r := &ReadFromFile{
//		path: "/tmp/access.log",
//	}
//
//	// 初始化结构体
//	w := &WriteToInfluxDB{
//		influxDBDsn: "username&password..",
//	}
//
//	// 初始化结构体
//	lp := &LogProcess{
//		// 使用make()函数初始化channel
//		rc: make(chan string),
//		wc: make(chan string),
//		reader: r,
//		writer: w,
//	}
//
//	// 使用go关键字创建goroutine, 使三个协程并发执行
//	go lp.reader.Read(lp.rc)
//	go lp.Process()
//	go lp.writer.Write(lp.wc)
//
//	// main goroutine睡眠1s, 等待其他goroutine的运行
//	time.Sleep(1*time.Second)
//}
